/* 
 * File:   Vacina.cpp
 * Author: thiagojesus
 * 
 * Created on May 23, 2012, 8:40 AM
 */

#include "Vacina.h"
#include <iostream>
#include <fstream>
#include "Lista.cpp"

Vacina::Vacina(int _ndoenca,int _nfras, std::string _descricao, int _idade, double _preco, Doenca::Listadoe _Listadoe, Frasco::ListaFrasco _fras) {
    this->ndoenca = _ndoenca;
    this->nfras = _nfras;
    this->descricao = _descricao;
    this->idade = _idade;
    this->preco = _preco;
    this->contra = _Listadoe;
    this->fras = _fras;
}

void Vacina::setContra(Doenca::Listadoe contra) {
    this->contra = contra;
}

Frasco::ListaFrasco Vacina::getFras() const {
    return fras;
}

void Vacina::setNfras(int nfras) {
    this->nfras = nfras;
}

int Vacina::getNfras() const {
    return nfras;
}

void Vacina::setNdoenca(int ndoenca) {
    this->ndoenca = ndoenca;
}

int Vacina::getNdoenca() const {
    return ndoenca;
}

Vacina::Vacina(const Vacina& orig) {
    descricao = orig.descricao;
    idade = orig.idade;
    preco = orig.preco;
}

Vacina::~Vacina() {
}

Vacina::Vacina(){
    
}

Vacina* Vacina::pesquisar(Listavac* p_l, std::string n){
    Vacina *aux;
    aux = *p_l;
    while(aux != NULL){
        if(aux->descricao==n){
            return aux;
        }else{
            aux = aux->prox;
        }
    }
    return NULL;
}

void Vacina::imprimirListavac(Listavac* v){
    Vacina *aux;
	aux = *v;
	while (aux != NULL){
            std::cout<<"\tDescricao: "<<aux->descricao<<"\n\t"<<"Idade: "<<aux->idade<<"\n\t"<<"Preco:"<<aux->preco<<"\n";
            Doenca::imprimirListadoe(&(aux->contra));
            Frasco::imprimirListaFras(&(aux->fras));
		aux = aux->prox;
	}
}

void Vacina::salvar(Listavac* p_l, int nvac){
    std::fstream myfile;
    Vacina *aux;
    int i;
    aux = *p_l;
    myfile.open("vacina.bin",std::ios::out|std::ios::trunc|std::ios::binary);
    if(!myfile){
        std::cout<<"ERRO!";
    }else{
        myfile<<nvac<<"\n";
        for(i=0;i<nvac;i++){
            myfile<<aux->descricao<<"\n"<<aux->idade<<"\n"<<aux->preco<<"\n"<<aux->ndoenca<<"\n"<<aux->nfras<<"\n";
            Doenca::salvar(&(aux->contra),aux->ndoenca);
            Frasco::salvar(&(aux->fras),aux->nfras);
            aux = aux->prox;
        }
        std::cout<<"arquivo criado com sucesso\n";
        myfile.close();
    }
    
    
}

int Vacina::carregar(Listavac* vac){
    std::fstream myfile;
    int nvac = 0, i;
    long local=0, parou=0, localfra = 0,paroufras =0;
    myfile.open("vacina.bin",std::ios::in|std::ios::binary);
    if(!myfile){
        std::cout<<"ERRO!";
        return 0;
    }else{
        myfile>>nvac;
        for(i=0;i<nvac;i++){
            Vacina *aux = new Vacina();
                getline(myfile,aux->descricao);
            getline(myfile,aux->descricao);
            myfile>>aux->idade>>aux->preco>>aux->ndoenca>>aux->nfras;
            parou = local;
            paroufras = localfra;
            local = Doenca::carregar(&(aux->contra),(aux->ndoenca),parou);
            localfra = Frasco::carregar(&(aux->fras),(aux->nfras),paroufras);
            cadastrar(vac,aux);
            }
        
    }
    
    myfile.close();
    if(remove("vacina.bin")!=0){
        perror("ERRO!");
    }
    
    if(remove("doenca.bin") !=0){
       perror("ERRO!"); 
    }
    
    if(remove("frasco.bin") !=0){
       perror("ERRO!"); 
    }
    return nvac;
}

